<js>继承
原型链继承
- 构造函数、原型、实例的关系:构造函数都有一个原型对象,原型对象又包含一个指向构造函数的指针,而实例则包含一个原型对象的指针
- 原型链继承问题:实例使用同一个原型对象,更改原型对象上的属性会影响所有实例
1 | function Father(){ |
构造函数继承(call)
- 存在问题:子类无法继承父类原型中存在的方法
1 | function Father() { |
组合继承
- 原型继承 + 构造函数继承
- 存在问题:父构造函数会执行两次
1 | function Father() { |
原型式继承Object.create
- Object.create,两个参数:新对象的原型对象、对象的属性类型参照Object.defineProperties()的第二个参数(可选)
- 存在问题:使用浅拷贝方式复制属性,引用类型属性共用
1 | const parent = { |
寄生式继承
- 可以在父类基础上添加方法
- 存在问题:父类引用类型共用
1 | const parent = { |
组合寄生式继承
- 通过寄生方式较少父类构造函数调用,通过组合方式避免父类引用类型互相影响
- es6 extends关键字使用类似方式实现
1 | // 通过寄生方式较少父类构造函数调用 |